﻿/*   
    Copyright (C) 2009 Galaktika Corporation ZAO

    This file is a part of Galaktika.BusinessMonitor
 
    Galaktika.BusinessMonitor is a free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
      
    You should have received a copy of the GNU General Public License
    along with Galaktika.BusinessMonitor.  If not, see <http://www.gnu.org/licenses/>.
  
    If GPL v.3 is not suitable for your products or company,
    Galaktika Corp provides Galaktika.BusinessMonitor under a flexible commercial license
    designed to meet your specific usage and distribution requirements.
    If you have already obtained a commercial license from Galaktika Corp,
    you can use this file under those license terms.
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using Galaktika.BI.Silverlight.ClientApp.Web.Runtime.Services;
using Ranet.Olap.Core.Data;
using Ranet.Olap.Core.Providers;
using Ranet.Olap.Core;

namespace Galaktika.BI.Silverlight.ClientApp.Web
{
    public class PivotGridExportHandler : IHttpHandler, IReadOnlySessionState
    {
        public PivotGridExportHandler()
        {

        }

        #region IHttpHandler Members

        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            string token = context.Request.Params["token"];
            if (string.IsNullOrEmpty(token))
                return;
            object obj = context.Session[token];
            if (obj == null)
                return;
            Parameters parameters = obj as Parameters;
            if (parameters == null)
                return;

            CellSetData res = Runtime.DataAccess.AdomdQueryExecutor.StaticExecuteQuery(parameters.ConnectionString,
                                                                                       parameters.Query);
            if (res == null)
                return;
            PivotDataProvider pivotProvider = new PivotDataProvider(new CellSetDataProvider(res));
            string xmlExcel = ExportHelper.ExportToExcel(pivotProvider);
            context.Response.ClearContent();
            context.Response.Buffer = true;
            context.Response.BufferOutput = true;
            context.Response.ContentType = "application/vnd.ms-excel";
            context.Response.Charset = "";
            context.Response.AddHeader("Content-Transfer-Encoding", "chunked");
            context.Response.AddHeader("Content-Disposition", "attachment;filename=ExportData.xml");
            context.Response.Write(xmlExcel);
            context.Response.End();

        }

        #endregion
    }
}
